using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Attributes.DomainAttributes;
using Baci.Net.ToolKit.ArcGISProGeoprocessor.Models.Enums;
using System.Collections.Generic;
using System.ComponentModel;

namespace Baci.ArcGIS._DataManagementTools._Package
{
    /// <summary>
    /// <para>Manage Scene Cache Worker</para>
    /// <para>Manage Scene Cache Worker</para>
    /// <para>管理 Scene Cache Worker</para>
    /// </summary>    
    [DisplayName("Manage Scene Cache Worker")]
    public class ManageSceneCacheWorker : AbstractGPProcess
    {
        /// <summary>
        /// 无参构造
        /// </summary>
        public ManageSceneCacheWorker()
        {

        }

        /// <summary>
        /// 有参构造
        /// </summary>
        /// <param name="_service_url">
        /// <para>Input Service URL</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        /// <param name="_layer">
        /// <para>Layer</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        /// <param name="_update_mode">
        /// <para>Update Mode</para>
        /// <para></para>
        /// <para></para>
        /// </param>
        public ManageSceneCacheWorker(object _service_url, object _layer, _update_mode_value _update_mode)
        {
            this._service_url = _service_url;
            this._layer = _layer;
            this._update_mode = _update_mode;
        }
        public override string ToolboxName => "Data Management Tools";

        public override string ToolName => "Manage Scene Cache Worker";

        public override string CallName => "management.ManageSceneCacheWorker";

        public override List<string> AcceptEnvironments => [];

        public override object[] ParameterInfo => [_service_url, _layer, _update_mode.GetGPValue(), _update_extent, _area_of_interest, _out_service_url];

        /// <summary>
        /// <para>Input Service URL</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Input Service URL")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _service_url { get; set; }


        /// <summary>
        /// <para>Layer</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Layer")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public object _layer { get; set; }


        /// <summary>
        /// <para>Update Mode</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Mode")]
        [Description("")]
        [Option(OptionTypeEnum.Must)]
        public _update_mode_value _update_mode { get; set; }

        public enum _update_mode_value
        {
            /// <summary>
            /// <para>RECREATE_EMPTY_NODES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RECREATE_EMPTY_NODES")]
            [GPEnumValue("RECREATE_EMPTY_NODES")]
            _RECREATE_EMPTY_NODES,

            /// <summary>
            /// <para>RECREATE_ALL_NODES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("RECREATE_ALL_NODES")]
            [GPEnumValue("RECREATE_ALL_NODES")]
            _RECREATE_ALL_NODES,

            /// <summary>
            /// <para>PARTIAL_UPDATE_NODES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PARTIAL_UPDATE_NODES")]
            [GPEnumValue("PARTIAL_UPDATE_NODES")]
            _PARTIAL_UPDATE_NODES,

            /// <summary>
            /// <para>PARTIAL_UPDATE_ATTRIBUTES</para>
            /// <para></para>
            /// <para></para>
            /// </summary>
            [Description("PARTIAL_UPDATE_ATTRIBUTES")]
            [GPEnumValue("PARTIAL_UPDATE_ATTRIBUTES")]
            _PARTIAL_UPDATE_ATTRIBUTES,

        }

        /// <summary>
        /// <para>Update Extent</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Update Extent")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _update_extent { get; set; } = null;


        /// <summary>
        /// <para>Area of Interest</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Area of Interest")]
        [Description("")]
        [Option(OptionTypeEnum.optional)]
        public object _area_of_interest { get; set; } = null;


        /// <summary>
        /// <para>Output Service URL</para>
        /// <para></para>
        /// <para></para>
        /// <para></para>
        /// </summary>
        [DisplayName("Output Service URL")]
        [Description("")]
        [Option(OptionTypeEnum.derived)]
        public object _out_service_url { get; set; }


        public ManageSceneCacheWorker SetEnv()
        {
            base.SetEnv();
            return this;
        }

    }

}